CC = gcc
OPT = -O2 -fomit-frame-pointer
LIBS = -lpthread
TARGET = l33t_server
MISC = Makefile
INCDIR = src/include
SRCDIR = src
BINDIR = bin

all: $(TARGET)

$(TARGET): $(BINDIR)/parser.o $(BINDIR)/settings.o $(BINDIR)/sync.o $(BINDIR)/thread_pool.o $(BINDIR)/sock_lib.o $(BINDIR)/http.o $(BINDIR)/main.o $(INCDIR)/defs.h
	$(CC) $(OPT) $(LIBS) -o $(BINDIR)/$(TARGET) $(BINDIR)/*.o 

$(BINDIR)/parser.o: $(INCDIR)/parser.h $(SRCDIR)/parser.c 
	-mkdir bin > /dev/null
	$(CC) $(OPT) -c -o $(BINDIR)/parser.o $(SRCDIR)/parser.c 

$(BINDIR)/settings.o: $(SRCDIR)/settings.c $(INCDIR)/settings.h
	$(CC) $(OPT) -c -o $(BINDIR)/settings.o $(SRCDIR)/settings.c

$(BINDIR)/sync.o: $(INCDIR)/sync.h $(SRCDIR)/sync.c
	$(CC) $(OPT) -c -o $(BINDIR)/sync.o $(SRCDIR)/sync.c

$(BINDIR)/thread_pool.o: $(INCDIR)/thread_pool.h $(SRCDIR)/thread_pool.c
	$(CC) $(OPT) -c -o $(BINDIR)/thread_pool.o $(SRCDIR)/thread_pool.c

$(BINDIR)/sock_lib.o: $(SRCDIR)/sock_lib.c $(INCDIR)/sock_lib.h
	$(CC) $(OPT) -c -o $(BINDIR)/sock_lib.o $(SRCDIR)/sock_lib.c

$(BINDIR)/http.o: $(SRCDIR)/http.c $(INCDIR)/http.h
	$(CC) $(OPT) -c -o $(BINDIR)/http.o $(SRCDIR)/http.c

$(BINDIR)/main.o: $(SRCDIR)/main.c $(INCDIR)/sock_lib.h $(INCDIR)/parser.h $(INCDIR)/defs.h
	$(CC) $(OPT) -c -o $(BINDIR)/main.o $(SRCDIR)/main.c

clean:
	rm -f $(BINDIR)/*.o $(BINDIR)/$(TARGET)
